perm filename NEWDLI[E,ALS] blob sn#261614 filedate 1977-02-02 generic text, type C, neo UTF8
COMMENT āŠ—   VALID 00004 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	NEWDLI NEWD1 NEWD2 NEWD3 NEWD4 NEWD5
C00007 00003	ABREV NDSAIL NDSA0 NDSA1 NDSA2 NDSA3
C00009 00004	NDSA4 NDSA5 NDSA6 NDSA7 NDSA8 NDSA9 NDSA9A NDSA9B NDSA10 NDSA11 NDS11A NDSA12 NDSA13 NDSA14 NDSA15 NDSA16
C00012 ENDMK
CāŠ—;
;NEWDLI NEWD1 NEWD2 NEWD3 NEWD4 NEWD5

;Routine to initiate and link new line
NEWDLS:	PUSHJ P,ENDSET		;To guarentee that new line will be at the end of FS
	TLO F,NOCHK		;Don't CORE DOWN untill through
	MOVEI A,1
	PUSHJ P,SETARR
	TRO F,UPDTXT		;This is the first line on the page
	MOVEI B,PAGE		;Start at top of page
	HRRZ H,FSEND
	ADDI H,1
	HRRZ T,(B)
	HLLZ Q,TXTFLG(T)	;Save flags
LEG	HLLM Q,TXTFLG(H)
	HRRZS TXTFLG(T)	;No longer the first line
	AOS TT,TXTNUM
LEG	HRRM TT,TXTSER(H)	;Assign H new serial number
	MOVEM TT,SRCNUM
	HRRZ T,(B)		;Link up new area as first line on page
	HRRM T,(H)
	HRLM B,(H)
	HRLM H,(T)
	HRRM H,PAGE
	HRRZM H,ARRLIN
	HRRZM H,WINLIN
	MOVE I,H
	ADD H,[440700,,LLDESC]	;Pointer for depositing text
	MOVEI E,40
	SETZB Q,G		;Q counts labels, G counts characters
	HRRZ B,(I)		;Start on old first line
	POPJ P,

;This code generates a new first line, listing all labels (in SAIL format)
NEWDLI:	PUSHJ P,NEWDLS		;Start set-up
	MOVEI C,73		;Start with a ;
LEG	IDPB C,H
NEWD1:	MOVSI T,-10
	MOVE D,B
	ADD D,[440700,,LLDESC]
NEWD2:	MOVEM D,DSAVE#
	ILDB C,D
	CAIE C,40
	CAIN C,11
	JRST NEWD2		;Ignore initial spaces and TABS
	SKIPA
NEWD3:	ILDB C,D		;Check line for a label
	CAIN C,72		;Is it a colon?
	AOJA Q,NEWD5		;Go copy this label
	CAIE C,15		;Are we at the end of the line?
	CAIN C,73		;Is it a semicolon?
	SKIPA
	AOBJN T,NEWD3
NEWD4:	HRRZ B,(B)		;Go to the next line
	CAIE B,BOTSTR
	JRST NEWD1		;and try again
NEWD4A:	LDB C,H
	CAIE C,40
	AOJA G,.+2		;Initial semicolon or space was not counted
	ADD H,[70000,,0]	;Overwrite last space which was counted
	MOVEI C,15
LEG	IDPB C,H
	MOVEI C,12
LEG	IDPB C,H
	TDZA C,C
LEG	IDPB C,H		;And a null
	TLNE H,760000
	JRST .-2
	MOVSI TT,2(G)		;2 for CRLF + char. count
	ADDI TT,(G)		;but only char. count into right half
	MOVEM TT,TXTCNT(I)	;Record char counts
	AOS LINES		;Add to line count
	HLRZ T,TXTCNT(I)
	ADDM T,CHARS	 	;Add to char count
	MOVE T,I		;Display text must be in ASCID
	ADDI T,LLDESC		;Get address of first text word
	MOVEI TT,1
	IORM TT,(T)		;Convert to ASCID
	CAIGE T,(H)
	AOJA T,.-2
	MOVEI TT,2(H)
	MOVSI T,TXTCOD
	FSFIX TT,T
	PUSHJ P,ENDFIX
	TLZ F,NOCHK
	PUSHJ P,LINSET
	PUSHJ P,SETWRT
	SETZM TYOPNT
	HRRZ T,TXTCNT(I)
	OUTSTR [ASCIZ/
The new line lists /]
	TYPDEC Q
	OUTSTR [ASCIZ/ labels, in /]
	TYPDEC T
	OUTSTR [ASCIZ/ characters. /]
	JRST POPJ1

NEWD5:	MOVE D,DSAVE		;Go back and copy this label
	HRRZS T	
	ILDB C,D
LEG	IDPB C,H
	AOS G
	SOJG T,.-3
LEG	IDPB E,H
	AOJA G,NEWD4

;Forces 2 letters for the NEWDLINE command
NOGOOD:	SORRY NOGOOD is N.G.
	JRST POPJ1
;ABREV NDSAIL NDSA0 NDSA1 NDSA2 NDSA3

IMPURE
ABREV:	ASCII/PROCEDURE/
	ASCII/RECORD_CLA/
	ASCII/RECORD!CLA/
PURE
;This code generates a new first line, for Sail programs
NDSAIL:	SETZM TYIPNT		;First read any defined words to replace usual names
	MOVSI T,-3		;3 permitted
	PUSHJ P,TYI
	JRST NDSA4		;Use standard names
	CAIE C,40
	CAIN C,11
	JRST .-4		;Ignore initial spaces and tabs
NDSA0:	MOVE D,[440700,,BUF]
	MOVSI B,12		;Allow only 10 characters
	SETZM BUF
	SETZM BUF+1
	CAIE C,","
	JRST NDSA1
	AOS T
	AOBJN T,NDSA0		;Use default
	JRST NDSA4		;No more allowed
NDSA1:	CAIL C,140
	CAILE C,172
	SKIPA
	SUBI C,40		;Make upper case
	IDPB C,D
NDSA2:	PUSHJ P,TYI		;Now read string
	JRST NDSA3
	CAIE C,","
	AOBJN B,NDSA1
NDSA3:	MOVE D,BUF
	MOVEM D,ABREV(T)
	MOVE D,BUF+1
	MOVEM D,ABREV+1(T)
	CAIN C,15
	JRST NDSA4
	AOS T
	AOBJN T,NDSA0
;NDSA4 NDSA5 NDSA6 NDSA7 NDSA8 NDSA9 NDSA9A NDSA9B NDSA10 NDSA11 NDS11A NDSA12 NDSA13 NDSA14 NDSA15 NDSA16
	
NDSA4:	PUSHJ P,NEWDLS		;Start set-up
	MOVE C,[ASCII/BEGIN/]
	MOVEM C,(H)
	ADDI H,1		;One whole word
	MOVEI C,40
	IDPB C,H
	MOVEI G,5		;Do not count space now
	SETZ Q,			;To count words
NDSA5:	MOVE D,B
	ADD D,[440700,,LLDESC]
NDSA6:	MOVEM D,DSAVE
	ILDB C,D
	CAIE C,40
	CAIN C,11
	JRST NDSA6		;Ignore spaces and tabs
NDSA7:	SETZM BUF
	SETZM BUF+1
	MOVE E,[440700,,BUF]
	MOVSI T,-12		;Use 10 characters for test
	SKIPA
NDSA8:	ILDB C,E
	CAIE C,40
	CAIN C,11
	JRST NDSA9
	CAIE C,";"
	CAIN C,15
	JRST NDSA16		;Go to next line
	CAIL C,140
	CAILE C,172
	SKIPA
	SUBI C,40		;Make upper case
	IDPB C,E
	AOBJN T,NDSA8
NDSA9:	MOVSI T,-3
NDSA9A:	MOVE C,BUF
	CAIE C,ABREV(T)
	JRST NDSA9B
	MOVE C,BUF+1
	CAIN C,ABREV+1(T)
	AOJA Q,NDS11A		;A match
NDSA9B:	AOS T
	AOBJN T,NDSA9A
	MOVE D,DSAVE		;May be modifier, eat word and try again
NDSA10:	ILDB C,D
	CAIE C,40
	CAIN C,11
	JRST NDSA6		;At end of word
	CAIE C,";"
	CAIN C,15
	JRST NDSA16
	JRST NDSA10		;Still more chars

NDSA11:	MOVE C,BUF+1
	CAIN C,ABREV+1
	JRST NDS11A
	
	CAIE C,ABREV+3
	CAIN C,ABREV+5
	JRST NDS11A
	JRST NDSA9A

NDS11A:	MOVE D,DSAVE		;Eat this word and report the next one
NDSA12:	ILDB C,D
	CAIE C,40
	CAIN C,11
	JRST NDSA13		;At end of word
	CAIE C,";"
	CAIN C,15
	JRST NDSA16
	JRST NDSA10		;Still more chars

NDSA13:	ILDB C,D
	CAIE C,40
	CAIN C,11
	JRST NDSA13		;Ignore spaces here
	SKIPA
NDSA14:	ILDB C,D
	CAIE C,";"
	CAIN C,15
	JRST NDSA15
	CAIE C,"("
	CAIN C,40
	JRST NDSA15
	IDPB C,H
	AOJA G,NSA14
	JRST NDSA14

NDSA15:	MOVEI C,40
	IDPB C,H
	AOS G
NDSA16:	HRRZ B,(B)
	CAIE B,BOTSTR
	JRST NDSA5
	MOVEI C,";"
	DPB C,H
	JRST NEWD4A